//
//  CZEmoticonModel.swift
//  61.新工程表情键盘
//
//  Created by apple on 16/3/7.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

/*
emoticons里面的每个表情信息都是一个字典
    1.chs [好爱哦]  表情名称用于网络传输
    2.png lxh_xiaohaha.png 表情的图片名称
    3.code emoji对应的16进制字符串
*/
class CZEmoticonModel: NSObject, NSCoding {
    // 表情包文件夹名称
    var id: String
    
    // 表情名称用于网络传输
    var chs: String?
    
    // 表情的图片名称
    var png: String? {
        didSet {
            if let p = png {
                // 图片的完整路径 = bundle/表情包文件夹名称/png
                pngPath = "\(emoticonsBundlePath)/\(id)/\(p)"
            }
        }
    }
    
    // 表情图片的全路径
    // 当归档这个属性,在解档出来后,App的沙盒路径会改变,pngPath就找不到图片
    // pngPath是当别人给png赋值后再didSet里面拼接的
    // super.init前给对象的属性赋值是不会调用属性的didSet
    var pngPath: String?
    
    // emoji对应的16进制字符串
    var code: String? {
        didSet {
            // 将code转成emoji
            // 扫描对象
            let scanner = NSScanner(string: code!)
            
            var result: UInt32 = 0
            
            scanner.scanHexInt(&result)
            
            emoji = String(Character(UnicodeScalar(result)))
        }
    }
    
    // emoji表情String
    var emoji: String?
    
    // 字典转模型
    init(id: String, dict: [String: String]) {
        self.id = id
        super.init()
        
        // KVC字典转模型
        setValuesForKeysWithDictionary(dict)
    }
    
    // 字典的key在模型中找不到对应的属性
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    
    override var description: String {
        return "\n\t\t 表情模型: chs: \(chs), png: \(png), code: \(code), emoji: \(emoji), pngPath: \(pngPath))"
    }
    
    // MARK: - 归档和解档相关
    required init?(coder aDecoder: NSCoder) {
        id = aDecoder.decodeObjectForKey("id") as? String ?? ""
        chs = aDecoder.decodeObjectForKey("chs") as? String
        png = aDecoder.decodeObjectForKey("png") as? String
        pngPath = aDecoder.decodeObjectForKey("pngPath") as? String
        code = aDecoder.decodeObjectForKey("code") as? String
        emoji = aDecoder.decodeObjectForKey("emoji") as? String
    }
    
    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(id, forKey: "id")
        aCoder.encodeObject(chs, forKey: "chs")
        aCoder.encodeObject(png, forKey: "png")
        aCoder.encodeObject(pngPath, forKey: "pngPath")
        aCoder.encodeObject(code, forKey: "code")
        aCoder.encodeObject(emoji, forKey: "emoji")
    }
}
